

#ifndef ACACCOUNTDAO_INTERFACE_H
#define ACACCOUNTDAO_INTERFACE_H

#include <stdint.h>
#include <string>
#include "app_platform/cntl_info.h"

#include "erp/acaccount/ddo/acitemsddo_acaccount.h"	
#include <set>	
#include <map>	
#include <vector>	
#include "erp/acaccount/ddo/bankaccountddo_acaccount.h"	
#include "erp/acaccount/ddo/acitemsfilterddo_acaccount.h"	
#include "erp/acaccount/ddo/bankaccountfilterddo_acaccount.h"	


namespace erp
{
namespace acaccount
{
namespace dao
{

	/// 同步调用接口
	class IACAccountDao	{
	public:
		virtual ~IACAccountDao() {}

	public:

		/**
		 *
	 	 *  写入&更新经营类会计项目信息 
		 *
		 *@param String machineKey: 机器码，必填  				
		 *@param String source: 调用来源，必填  				
		 *@param uint32_t sceneId: 场景id，必填  				
		 *@param ACItemsDdo aCItemsDdo: 经营类会计项目信息ddo，必填  				
		 *@param String inReserve: 请求保留字  				
		 *@param String errmsg: 错误信息  		
		 *@param uint64_t aCItemsSysNo: 银行账户SysNo 		
		 *@param String outReserve: 返回保留字   		
		 *
		 *@return  uint32_t : 0(成功) 其它失败
 	     *
		 */
	    virtual uint32_t AddAndUpdateACItems(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const erp::acaccount::ddo::CACItemsDdo& aCItemsDdo,
				const std::string& inReserve,
				std::string& errmsg,
				uint64_t& aCItemsSysNo,
				std::string& outReserve
	    	) = 0;

		/**
		 *
	 	 *  写入&更新银行账户信息 
		 *
		 *@param String machineKey: 机器码，必填  				
		 *@param String source: 调用来源，必填  				
		 *@param uint32_t sceneId: 场景id，必填  				
		 *@param BankAccountDdo bankAccount: 银行账户信息ddo，必填  				
		 *@param String inReserve: 请求保留字  				
		 *@param String errmsg: 错误信息  		
		 *@param uint64_t bankAccountSysNo: 银行账户SysNo 		
		 *@param String outReserve: 返回保留字   		
		 *
		 *@return  uint32_t : 0(成功) 其它失败
 	     *
		 */
	    virtual uint32_t AddAndUpdateBankAccount(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const erp::acaccount::ddo::CBankAccountDdo& bankAccount,
				const std::string& inReserve,
				std::string& errmsg,
				uint64_t& bankAccountSysNo,
				std::string& outReserve
	    	) = 0;

		/**
		 *
	 	 *  逻辑删除经营类会计项目信息 
		 *
		 *@param String machineKey: 机器码，必填  				
		 *@param String source: 调用来源，必填  				
		 *@param uint32_t sceneId: 场景id，必填  				
		 *@param uint64_t ACItemsSysNo: 会计项目信息SysNo 				
		 *@param String inReserve: 请求保留字  				
		 *@param String errmsg: 错误信息  		
		 *@param String outReserve: 返回保留字   		
		 *
		 *@return  uint32_t : 0(成功) 其它失败
 	     *
		 */
	    virtual uint32_t DeleteACItems(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				uint64_t ACItemsSysNo,
				const std::string& inReserve,
				std::string& errmsg,
				std::string& outReserve
	    	) = 0;

		/**
		 *
	 	 *  逻辑删除银行账户信息 
		 *
		 *@param String machineKey: 机器码，必填  				
		 *@param String source: 调用来源，必填  				
		 *@param uint32_t sceneId: 场景id，必填  				
		 *@param uint64_t bankAccountSysNo: 银行账户SysNo 				
		 *@param String inReserve: 请求保留字  				
		 *@param String errmsg: 错误信息  		
		 *@param String outReserve: 返回保留字   		
		 *
		 *@return  uint32_t : 0(成功) 其它失败
 	     *
		 */
	    virtual uint32_t DeleteBankAccount(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				uint64_t bankAccountSysNo,
				const std::string& inReserve,
				std::string& errmsg,
				std::string& outReserve
	    	) = 0;

		/**
		 *
	 	 *  Filter过滤获取经营类会计项目信息
		 *
		 *@param String machineKey: 机器码，必填  				
		 *@param String source: 调用来源，必填  				
		 *@param uint32_t sceneId: 场景id，必填  				
		 *@param ACItemsFilterDdo bankAccountFilter: 过滤器，必填  				
		 *@param String inReserve: 请求保留字  				
		 *@param String errmsg: 错误信息  		
		 *@param Vector aCItems: 经营类会计项目信息 列表 		
		 *@param String outReserve: 返回保留字   		
		 *
		 *@return  uint32_t : 0(成功) 其它失败
 	     *
		 */
	    virtual uint32_t GetACItemsByFilter(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const erp::acaccount::ddo::CACItemsFilterDdo& bankAccountFilter,
				const std::string& inReserve,
				std::string& errmsg,
				std::vector<erp::acaccount::ddo::CACItemsDdo >& aCItems,
				std::string& outReserve
	    	) = 0;

		/**
		 *
	 	 *  通过SysNos获取经营类会计项目信息
		 *
		 *@param String machineKey: 机器码，必填  				
		 *@param String source: 调用来源，必填  				
		 *@param uint32_t sceneId: 场景id，必填  				
		 *@param Set sysNoList: 银行账户SysNo数组，必填  				
		 *@param String inReserve: 请求保留字  				
		 *@param String errmsg: 错误信息  		
		 *@param Map aACItems: 经营类会计项目信息列表  		
		 *@param String outReserve: 返回保留字   		
		 *
		 *@return  uint32_t : 0(成功) 其它失败
 	     *
		 */
	    virtual uint32_t GetACItemsBySysNos(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const std::set<uint64_t >& sysNoList,
				const std::string& inReserve,
				std::string& errmsg,
				std::map<uint64_t,erp::acaccount::ddo::CACItemsDdo >& aACItems,
				std::string& outReserve
	    	) = 0;

		/**
		 *
	 	 *  Filter过滤获取银行账户信息 
		 *
		 *@param String machineKey: 机器码，必填  				
		 *@param String source: 调用来源，必填  				
		 *@param uint32_t sceneId: 场景id，必填  				
		 *@param BankAccountFilterDdo bankAccountFilter: 过滤器，必填  				
		 *@param String inReserve: 请求保留字  				
		 *@param String errmsg: 错误信息  		
		 *@param Vector bankAccount: 银行账户信息 列表 		
		 *@param String outReserve: 返回保留字   		
		 *
		 *@return  uint32_t : 0(成功) 其它失败
 	     *
		 */
	    virtual uint32_t GetBankAccountByFilter(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const erp::acaccount::ddo::CBankAccountFilterDdo& bankAccountFilter,
				const std::string& inReserve,
				std::string& errmsg,
				std::vector<erp::acaccount::ddo::CBankAccountDdo >& bankAccount,
				std::string& outReserve
	    	) = 0;

		/**
		 *
	 	 *  通过SysNos获取银行账户信息 
		 *
		 *@param String machineKey: 机器码，必填  				
		 *@param String source: 调用来源，必填  				
		 *@param uint32_t sceneId: 场景id，必填  				
		 *@param Set sysNoList: 银行账户SysNo数组，必填  				
		 *@param String inReserve: 请求保留字  				
		 *@param String errmsg: 错误信息  		
		 *@param Map bankAccount: 银行账户信息列表  		
		 *@param String outReserve: 返回保留字   		
		 *
		 *@return  uint32_t : 0(成功) 其它失败
 	     *
		 */
	    virtual uint32_t GetBankAccountBySysNos(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const std::set<uint64_t >& sysNoList,
				const std::string& inReserve,
				std::string& errmsg,
				std::map<uint64_t,erp::acaccount::ddo::CBankAccountDdo >& bankAccount,
				std::string& outReserve
	    	) = 0;
	};

	///异步调用接口
	class IACAccountDaoAsyc
	{
	public:
		virtual ~IACAccountDaoAsyc() {}
	public:
		virtual uint32_t SendAddAndUpdateACItems(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const erp::acaccount::ddo::CACItemsDdo& aCItemsDdo,
				const std::string& inReserve
				) = 0;
		virtual uint32_t RecvAddAndUpdateACItems(
				const CCntlInfo& rCntlInfo,

				std::string& errmsg,
				uint64_t& aCItemsSysNo,
				std::string& outReserve
				) = 0;
		virtual uint32_t SendAddAndUpdateBankAccount(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const erp::acaccount::ddo::CBankAccountDdo& bankAccount,
				const std::string& inReserve
				) = 0;
		virtual uint32_t RecvAddAndUpdateBankAccount(
				const CCntlInfo& rCntlInfo,

				std::string& errmsg,
				uint64_t& bankAccountSysNo,
				std::string& outReserve
				) = 0;
		virtual uint32_t SendDeleteACItems(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				uint64_t ACItemsSysNo,
				const std::string& inReserve
				) = 0;
		virtual uint32_t RecvDeleteACItems(
				const CCntlInfo& rCntlInfo,

				std::string& errmsg,
				std::string& outReserve
				) = 0;
		virtual uint32_t SendDeleteBankAccount(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				uint64_t bankAccountSysNo,
				const std::string& inReserve
				) = 0;
		virtual uint32_t RecvDeleteBankAccount(
				const CCntlInfo& rCntlInfo,

				std::string& errmsg,
				std::string& outReserve
				) = 0;
		virtual uint32_t SendGetACItemsByFilter(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const erp::acaccount::ddo::CACItemsFilterDdo& bankAccountFilter,
				const std::string& inReserve
				) = 0;
		virtual uint32_t RecvGetACItemsByFilter(
				const CCntlInfo& rCntlInfo,

				std::string& errmsg,
				std::vector<erp::acaccount::ddo::CACItemsDdo >& aCItems,
				std::string& outReserve
				) = 0;
		virtual uint32_t SendGetACItemsBySysNos(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const std::set<uint64_t >& sysNoList,
				const std::string& inReserve
				) = 0;
		virtual uint32_t RecvGetACItemsBySysNos(
				const CCntlInfo& rCntlInfo,

				std::string& errmsg,
				std::map<uint64_t,erp::acaccount::ddo::CACItemsDdo >& aACItems,
				std::string& outReserve
				) = 0;
		virtual uint32_t SendGetBankAccountByFilter(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const erp::acaccount::ddo::CBankAccountFilterDdo& bankAccountFilter,
				const std::string& inReserve
				) = 0;
		virtual uint32_t RecvGetBankAccountByFilter(
				const CCntlInfo& rCntlInfo,

				std::string& errmsg,
				std::vector<erp::acaccount::ddo::CBankAccountDdo >& bankAccount,
				std::string& outReserve
				) = 0;
		virtual uint32_t SendGetBankAccountBySysNos(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const std::set<uint64_t >& sysNoList,
				const std::string& inReserve
				) = 0;
		virtual uint32_t RecvGetBankAccountBySysNos(
				const CCntlInfo& rCntlInfo,

				std::string& errmsg,
				std::map<uint64_t,erp::acaccount::ddo::CBankAccountDdo >& bankAccount,
				std::string& outReserve
				) = 0;
	};
	
	
}
}
}

#endif /*ACACCOUNTDAO_INTERFACE_H*/
